class extends Migration { public function up(): void { Schema::create('posts', function (Blueprint $table) { $table->id(); // 主キー $table->timestamps(); // タイムスタンプ $table->text('title'); // 「件名」カラムを追加する例 }); } }; class Post extends Model { use HasFactory; } 2023/3/25 PHPerKaigi 2023 / Dr. Strange Laravel
View - C View - R View - U View - D Form Request Seeder Factory test User Policy Route Model Binding Model Controller Table Resource View - C View - R View - U View - D Form Request Seeder Factory test Post Policy Route Model Binding Model Controller Table Resource View - C View - R View - U View - D Form Request Seeder Factory test Comment Policy Route Model Binding Model Controller Table Resource View - C View - R View - U View - D Form Request Seeder Factory test Tag 2023/3/25 PHPerKaigi 2023 / Dr. Strange Laravel フレームワークが提供する構造 = ベストプラクティス
View - C View - R View - U View - D Post Model Post Controller posts Table Post Resource View - C View - R View - U View - D return $post->user; Post::where( 'user_id', $user->id ) 責務の境界はレイヤーではなくリソース 2023/3/25 PHPerKaigi 2023 / Dr. Strange Laravel
ユーザーの全投稿を取得 public function getPosts() { return Post::where('user_id', $this->id) ->get(); } } class User extends Model { // Good 投稿へのリレーションシップを宣言 public function posts() { return $this->hasMany(Post::class); } } 2023/3/25 PHPerKaigi 2023 / Dr. Strange Laravel
View - C View - R View - U View - D Post Model Post Controller posts Table Post Resource View - C View - R View - U View - D ユーザーでも 投稿でもない 何か 責務 暴⾛ 複数のモデルへ関⼼が横断する場合どうするか? 2023/3/25 PHPerKaigi 2023 / Dr. Strange Laravel
App¥Http¥Controllers; use App¥Models¥Post; use App¥Models¥User; use Illuminate¥Http¥Request; use Illuminate¥Http¥Response; use Illuminate¥Support¥Facades¥Cache; use Illuminate¥Support¥Facades¥Http; use Illuminate¥Support¥Facades¥Session; use Illuminate¥Support¥Facades¥View; • Bladeテンプレート 事実上の利⽤不可 • コントローラー 視覚的なフィードバック 2023/3/25 PHPerKaigi 2023 / Dr. Strange Laravel
- C View - R View - U View - D Form Request Seeder Factory test 何が嬉しいか?(ファサードを使うべき理由) 79 システム外への副作⽤を伴う処理の場合も リクエストレスポンスのテストが容易かつ安全に可能 Facade Fake 2023/3/25 PHPerKaigi 2023 / Dr. Strange Laravel